存在已知协方差情况下的最小二乘解 您所在的位置:网站首页 自协方差 方差 存在已知协方差情况下的最小二乘解

存在已知协方差情况下的最小二乘解

2024-07-13 04:22| 来源: 网络整理| 查看: 265

本页翻译不是最新的。点击此处可查看最新英文版本。

lscov

存在已知协方差情况下的最小二乘解

语法

x = lscov(A,B) x = lscov(A,B,w) x = lscov(A,B,V) x = lscov(A,B,V,alg) [x,stdx] = lscov(...) [x,stdx,mse] = lscov(...) [x,stdx,mse,S] = lscov(...)

说明

x = lscov(A,B) 返回线性方程组 A*x = B 的普通最小二乘解,即 x 是使得平方误差 (B - A*x)'*(B - A*x) 之和最小的 n×1 向量,其中 A 是 m×n 矩阵,B 是 m×1 矩阵。B 也可以是 m×k 矩阵,lscov 返回 B 的每列的一个解。当 rank(A) < n 时,lscov 将 x 的最大可能元素数设置为零以获取一个“基本解”。

x = lscov(A,B,w)(其中 w 是长度为 m 的正实数权重向量)返回线性方程组 A*x = B 的加权最小二乘解,即 x 使得 (B - A*x)'*diag(w)*(B - A*x) 最小。w 通常包含计数或逆方差。

x = lscov(A,B,V)(其中 V 是 m×m 实对称正定矩阵)返回协方差矩阵与 V 成比例的线性方程组 A*x = B 的广义最小二乘解,即 x 使得 (B - A*x)'*inv(V)*(B - A*x) 最小。

更为常见的情况是,V 可以是半正定矩阵,lscov 返回在 A*x + T*e = B 约束下,使得 e'*e 最小的 x,最小值计算基于 x、e 和 T*T' = V。当 V 为半正定矩阵时,仅当 B 与 A 和 V 一致(即 B 位于 [A T] 列空间内),此问题才有一个解,否则 lscov 将返回错误。

默认情况下,lscov 计算 V 的乔列斯基分解,实际上是反转该因子以将该问题转变为普通最小二乘法。但是,如果 lscov 确定 V 为半正定矩阵,它将使用正交分解算法以避免对 V 求逆。

x = lscov(A,B,V,alg) 指定当 V 为矩阵时用于计算 x 的算法。alg 可以具有以下值:

'chol' 使用 V 的乔列斯基分解。

'orth' 使用正交分解,它在 V 是病态或为奇异矩阵时更合适,但计算的开销更高。

[x,stdx] = lscov(...) 返回 x 的估计标准误差。当 A 秩亏时,与 x 的必要零元素对应的 stdx 元素中会包含零。

[x,stdx,mse] = lscov(...) 返回均方误差。如果 B 假定具有协方差矩阵 σ2V(或 (σ2)×diag(1./W)),则 mse 是 σ2 的估计值。

[x,stdx,mse,S] = lscov(...) 返回 x 的估计协方差矩阵。当 A 秩亏时,与 x 的必要零元素对应的 S 的行和列中会包含零。lscov 在使用多个右端进行调用时(即如果 size(B,2) > 1)无法返回 S。

当 A 和 V 满秩时,这些数量的标准公式为:

x = inv(A'*inv(V)*A)*A'*inv(V)*B

mse = B'*(inv(V) - inv(V)*A*inv(A'*inv(V)*A)*A'*inv(V))*B./(m-n)

S = inv(A'*inv(V)*A)*mse

stdx = sqrt(diag(S))

但是,lscov 使用更快、更稳定且适合秩亏情况的方法。

lscov 假定已知 B 的协方差矩阵(仅缩放因子未知)。mse 是该未知缩放因子的估计值,lscov 对输出 S 和 stdx 进行相应缩放。但是,如果已知 V 完全为 B 的协方差矩阵,则该缩放是不必要的。要在此情况下获取正确的估计值,应分别按 1/mse 和 sqrt(1/mse) 重新缩放 S 和 stdx。

示例示例 1 - 计算普通最小二乘法

MATLAB® 反斜杠运算符 (\) 使您可以通过计算回归系数的普通最小二乘法 (OLS) 来执行线性回归。您也可以使用 lscov 计算相同的 OLS 估计值。通过使用 lscov,还可以计算这些系数的标准差的估计值和回归差项的标准差。

x1 = [.2 .5 .6 .8 1.0 1.1]'; x2 = [.1 .3 .4 .9 1.1 1.4]'; X = [ones(size(x1)) x1 x2]; y = [.17 .26 .28 .23 .27 .34]'; a = X\y a = 0.1203 0.3284 -0.1312 [b,se_b,mse] = lscov(X,y) b = 0.1203 0.3284 -0.1312 se_b = 0.0643 0.2267 0.1488 mse = 0.0015示例 2 - 计算加权最小二乘法

使用 lscov 并通过提供相对观测值权值的向量来计算加权最小二乘法 (WLS) 拟合。例如,您可能想降权不可靠观测值对拟合的影响:

w = [1 1 1 1 1 .1]'; [bw,sew_b,msew] = lscov(X,y,w) bw = 0.1046 0.4614 -0.2621 sew_b = 0.0309 0.1152 0.0814 msew = 3.4741e-004示例 3 - 计算广义最小二乘法

使用 lscov 并通过提供观测值协方差矩阵来计算广义最小二乘法 (GLS) 拟合。例如,您的数据可能不相关:

V = .2*ones(length(x1)) + .8*diag(ones(size(x1))); [bg,sew_b,mseg] = lscov(X,y,V) bg = 0.1203 0.3284 -0.1312 sew_b = 0.0672 0.2267 0.1488 mseg = 0.0019示例 4 - 估计系数协方差矩阵

计算 OLS、WLS 或 GLS 拟合的协方差矩阵的估计值。系数标准差等于以下协方差矩阵的对角线上值的平方根:

[b,se_b,mse,S] = lscov(X,y); S S = 0.0041 -0.0130 0.0075 -0.0130 0.0514 -0.0328 0.0075 -0.0328 0.0221 [se_b sqrt(diag(S))] ans = 0.0643 0.0643 0.2267 0.2267 0.1488 0.1488算法

向量 x 计算数量 (A*x-B)'*inv(V)*(A*x-B) 的最小值。此问题的经典线性代数解为

x = inv(A'*inv(V)*A)*A'*inv(V)*B

但 lscov 函数计算 A 的 QR 分解,然后根据 V 修改 Q。

参考

[1] Strang, G., Introduction to Applied Mathematics, Wellesley-Cambridge, 1986, p. 398.

扩展功能C/C++ 代码生成 使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

用法说明和限制:

如果 A 秩亏或 V 为矩阵且秩亏,则必须启用对可变大小数组的支持。

代码生成不支持对此函数使用稀疏矩阵输入。

基于线程的环境 使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。

GPU 数组 通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。

用法说明和限制:

不支持稀疏矩阵输入。

有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。

分布式数组 使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。

用法说明和限制:

不支持稀疏矩阵输入。

有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。

版本历史记录

在 R2006a 之前推出

另请参阅

lsqnonneg | qr | mldivide | mrdivide



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有